Simplify and refactor out api code for getting title or page id
authorReedy <reedy@wikimedia.org>
Sat, 7 Apr 2012 21:47:06 +0000 (22:47 +0100)
committerReedy <reedy@wikimedia.org>
Fri, 27 Apr 2012 14:58:04 +0000 (15:58 +0100)
Change-Id: I098dd36619fff3610be6894037220d3472b809d5

includes/api/ApiBase.php
includes/api/ApiDelete.php
includes/api/ApiEditPage.php
includes/api/ApiProtect.php
includes/api/ApiQueryCategoryMembers.php

index 458214e..1103814 100644 (file)
@@ -698,6 +698,35 @@ abstract class ApiBase extends ContextSource {
                );
        }
 
+       /**
+        * @param $params array
+        * @return Title
+        */
+       public function getTitleOrPageId( $params ) {
+               $this->requireOnlyOneParameter( $params, 'title', 'pageid' );
+
+               $titleObj = null;
+               if ( isset( $params['title'] ) ) {
+                       $titleObj = Title::newFromText( $params['title'] );
+                       if ( !$titleObj ) {
+                               $this->dieUsageMsg( array( 'invalidtitle', $params['title'] ) );
+                       }
+               } elseif ( isset( $params['pageid'] ) ) {
+                       $titleObj = Title::newFromID( $params['pageid'] );
+                       if ( !$titleObj ) {
+                               $this->dieUsageMsg( array( 'nosuchpageid', $params['pageid'] ) );
+                       }
+               }
+               return $titleObj;
+       }
+
+       /**
+        * @return array
+        */
+       public function getTitleOrPageIdErrorMessage( ) {
+               return $this->getRequireOnlyOneParameterErrorMessages( array( 'title', 'pageid' ) );
+       }
+
        /**
         * Callback function used in requireOnlyOneParameter to check whether reequired parameters are set
         *
index b8ffff9..15c1f82 100644 (file)
@@ -46,24 +46,11 @@ class ApiDelete extends ApiBase {
        public function execute() {
                $params = $this->extractRequestParams();
 
-               $this->requireOnlyOneParameter( $params, 'title', 'pageid' );
-
-               if ( isset( $params['title'] ) ) {
-                       $titleObj = Title::newFromText( $params['title'] );
-                       if ( !$titleObj ) {
-                               $this->dieUsageMsg( array( 'invalidtitle', $params['title'] ) );
-                       }
-                       $pageObj = WikiPage::factory( $titleObj );
-                       $pageObj->loadPageData( 'fromdbmaster' );
-                       if ( !$pageObj->exists() ) {
-                               $this->dieUsageMsg( 'notanarticle' );
-                       }
-               } elseif ( isset( $params['pageid'] ) ) {
-                       $pageObj = WikiPage::newFromID( $params['pageid'] );
-                       if ( !$pageObj ) {
-                               $this->dieUsageMsg( array( 'nosuchpageid', $params['pageid'] ) );
-                       }
-                       $titleObj = $pageObj->getTitle();
+               $titleObj = $this->getTitleOrPageId( $params );
+               $pageObj = WikiPage::factory( $titleObj );
+               $pageObj->loadPageData( 'fromdbmaster' );
+               if ( !$pageObj->exists() ) {
+                       $this->dieUsageMsg( 'notanarticle' );
                }
 
                $reason = ( isset( $params['reason'] ) ? $params['reason'] : null );
@@ -241,7 +228,7 @@ class ApiDelete extends ApiBase {
 
        public function getPossibleErrors() {
                return array_merge( parent::getPossibleErrors(),
-                       $this->getRequireOnlyOneParameterErrorMessages( array( 'title', 'pageid' ) ),
+                       $this->getTitleOrPageIdErrorMessage(),
                        array(
                                array( 'invalidtitle', 'title' ),
                                array( 'nosuchpageid', 'pageid' ),
index 3153016..290c5df 100644 (file)
@@ -48,18 +48,9 @@ class ApiEditPage extends ApiBase {
                        $this->dieUsageMsg( 'missingtext' );
                }
 
-               $this->requireOnlyOneParameter( $params, 'title', 'pageid' );
-
-               if ( isset( $params['title'] ) ) {
-                       $titleObj = Title::newFromText( $params['title'] );
-                       if ( !$titleObj || $titleObj->isExternal() ) {
-                               $this->dieUsageMsg( array( 'invalidtitle', $params['title'] ) );
-                       }
-               } elseif ( isset( $params['pageid'] ) ) {
-                       $titleObj = Title::newFromID( $params['pageid'] );
-                       if ( !$titleObj ) {
-                               $this->dieUsageMsg( array( 'nosuchpageid', $params['pageid'] ) );
-                       }
+               $titleObj = $this->getTitleOrPageId( $params );
+               if ( $titleObj->isExternal() ) {
+                       $this->dieUsageMsg( array( 'invalidtitle', $params['title'] ) );
                }
 
                $apiResult = $this->getResult();
@@ -378,7 +369,7 @@ class ApiEditPage extends ApiBase {
                global $wgMaxArticleSize;
 
                return array_merge( parent::getPossibleErrors(),
-                       $this->getRequireOnlyOneParameterErrorMessages( array( 'title', 'pageid' ) ),
+                       $this->getTitleOrPageIdErrorMessage(),
                        array(
                                array( 'nosuchpageid', 'pageid' ),
                                array( 'missingtext' ),
index 596bc5c..57bf111 100644 (file)
@@ -37,22 +37,8 @@ class ApiProtect extends ApiBase {
                global $wgRestrictionLevels;
                $params = $this->extractRequestParams();
 
-               $this->requireOnlyOneParameter( $params, 'title', 'pageid' );
-
-               if ( isset( $params['title'] ) ) {
-                       $titleObj = Title::newFromText( $params['title'] );
-                       if ( !$titleObj ) {
-                               $this->dieUsageMsg( array( 'invalidtitle', $params['title'] ) );
-                       }
-                       $pageObj = WikiPage::factory( $titleObj );
-                       $pageObj->loadPageData( 'fromdbmaster' );
-               } elseif ( isset( $params['pageid'] ) ) {
-                       $pageObj = WikiPage::newFromID( $params['pageid'] );
-                       if ( !$pageObj ) {
-                               $this->dieUsageMsg( array( 'nosuchpageid', $params['pageid'] ) );
-                       }
-                       $titleObj = $pageObj->getTitle();
-               }
+               $titleObj = $this->getTitleOrPageId( $params );
+               $pageObj = WikiPage::factory( $titleObj );
 
                $errors = $titleObj->getUserPermissionsErrors( 'protect', $this->getUser() );
                if ( $errors ) {
@@ -204,7 +190,7 @@ class ApiProtect extends ApiBase {
 
        public function getPossibleErrors() {
                return array_merge( parent::getPossibleErrors(),
-                       $this->getRequireOnlyOneParameterErrorMessages( array( 'title', 'pageid' ) ),
+                       $this->getTitleOrPageIdErrorMessage(),
                        array(
                                array( 'invalidtitle', 'title' ),
                                array( 'nosuchpageid', 'pageid' ),
index fb1237f..7f0b827 100644 (file)
@@ -54,22 +54,9 @@ class ApiQueryCategoryMembers extends ApiQueryGeneratorBase {
        private function run( $resultPageSet = null ) {
                $params = $this->extractRequestParams();
 
-               $this->requireOnlyOneParameter( $params, 'title', 'pageid' );
-
-               if ( isset( $params['title'] ) ) {
-                       $categoryTitle = Title::newFromText( $params['title'] );
-
-                       if ( is_null( $categoryTitle ) || $categoryTitle->getNamespace() != NS_CATEGORY ) {
-                               $this->dieUsage( 'The category name you entered is not valid', 'invalidcategory' );
-                       }
-               } elseif( isset( $params['pageid'] ) ) {
-                       $categoryTitle = Title::newFromID( $params['pageid'] );
-
-                       if ( !$categoryTitle ) {
-                               $this->dieUsageMsg( array( 'nosuchpageid', $params['pageid'] ) );
-                       } elseif ( $categoryTitle->getNamespace() != NS_CATEGORY ) {
-                               $this->dieUsage( 'The category name you entered is not valid', 'invalidcategory' );
-                       }
+               $categoryTitle = $this->getTitleOrPageId( $params );
+               if ( $categoryTitle->getNamespace() != NS_CATEGORY ) {
+                       $this->dieUsage( 'The category name you entered is not valid', 'invalidcategory' );
                }
 
                $prop = array_flip( $params['prop'] );
@@ -383,7 +370,7 @@ class ApiQueryCategoryMembers extends ApiQueryGeneratorBase {
 
        public function getPossibleErrors() {
                return array_merge( parent::getPossibleErrors(),
-                       $this->getRequireOnlyOneParameterErrorMessages( array( 'title', 'pageid' ) ),
+                       $this->getTitleOrPageIdErrorMessage(),
                        array(
                                array( 'code' => 'invalidcategory', 'info' => 'The category name you entered is not valid' ),
                                array( 'code' => 'badcontinue', 'info' => 'Invalid continue param. You should pass the original value returned by the previous query' ),